

#ifndef PUNC_NAME
#define PUNCTUATOR(_p, _name) _p,
#else
#define PUNCTUATOR(_p, _name) _name,
#endif

PUNCTUATOR(pc_lbracket, "[")
PUNCTUATOR(pc_rbracket, "]")
PUNCTUATOR(pc_lparen, "(")
PUNCTUATOR(pc_rparen, ")")
PUNCTUATOR(pc_lbrace, "{")
PUNCTUATOR(pc_rbrace, "}")
PUNCTUATOR(pc_point, ".")
PUNCTUATOR(pc_arrow, "->")
PUNCTUATOR(pc_plusplus, "++")
PUNCTUATOR(pc_subsub, "--")
PUNCTUATOR(pc_and, "&")
PUNCTUATOR(pc_mul, "*")
PUNCTUATOR(pc_plus, "+")
PUNCTUATOR(pc_sub, "-")
PUNCTUATOR(pc_tilde, "~")
PUNCTUATOR(pc_exclamation, "!")
PUNCTUATOR(pc_slash, "/")
PUNCTUATOR(pc_percent, "%")
PUNCTUATOR(pc_lshif, "<<")
PUNCTUATOR(pc_rshif, ">>")
PUNCTUATOR(pc_langlebracket, "<")
PUNCTUATOR(pc_ranglebracket," >")
PUNCTUATOR(pc_lequal, "<=")
PUNCTUATOR(pc_requal, ">=")
PUNCTUATOR(pc_equalequal, "==")
PUNCTUATOR(pc_exequal, "!=")
PUNCTUATOR(pc_topangle, "^")
PUNCTUATOR(pc_or, "|")
PUNCTUATOR(pc_andand, "&&")
PUNCTUATOR(pc_oror, "||")
PUNCTUATOR(pc_question, "?")
PUNCTUATOR(pc_colon, ":")
PUNCTUATOR(pc_semi, ";")
PUNCTUATOR(pc_ldot, "...")
PUNCTUATOR(pc_equal, "=")
PUNCTUATOR(pc_multiequal, "*=")
PUNCTUATOR(pc_slashequal, "/=")
PUNCTUATOR(pc_percentequal, "%=")
PUNCTUATOR(pc_plusequal, "+=")
PUNCTUATOR(pc_subequal, "-=")
PUNCTUATOR(pc_lshiftequal, "<<=")
PUNCTUATOR(pc_rshiftequal, ">>=")
PUNCTUATOR(pc_andequal, "&=")
PUNCTUATOR(pc_topangleequal, "^=")
PUNCTUATOR(pc_orequal, "|=")
PUNCTUATOR(pc_comma, ",")
PUNCTUATOR(pc_sharp, "#")
PUNCTUATOR(pc_sharpsharp, "##")
PUNCTUATOR(pc_lcolon, "<:")
PUNCTUATOR(pc_rcolon, ":>")
PUNCTUATOR(pc_lpercent, "<%")
PUNCTUATOR(pc_rpercent, "%>")
PUNCTUATOR(pc_percentcolon, "%:")
PUNCTUATOR(pc_percentcolonpercent, "%:%:")